package com.secsbrain.deploy.biz;

import com.secsbrain.cmdb.client.model.AppDetail;
import com.secsbrain.cmdb.client.model.Server;
import com.secsbrain.deploy.client.model.BuildParam;
import com.secsbrain.deploy.client.model.HealthDto;
import com.secsbrain.deploy.dal.model.BuildRecord;

import java.util.List;
import java.util.Map;

import com.baomidou.framework.service.ISuperService;
import com.baomidou.mybatisplus.plugins.Page;

/**
 *
 * BuildRecord 表数据服务层接口
 *
 */
public interface IBuildRecordService extends ISuperService<BuildRecord> {
	
	/**
	 * 功能描述: <br>
	 * 新增构建记录
	 *
	 * @param app         应用详情
	 * @param buildParam  构建参数
	 * @param status      构建状态
	 * @return
	 */
	BuildRecord insertBuildRecord(AppDetail app, BuildParam buildParam, int status);

	/**
	 * 功能描述: <br>
	 * 执行构建
	 *
	 * @param app         应用详情
	 * @param buildParam  构建参数
	 * @return
	 */
	long executeBuild(AppDetail app,BuildParam buildParam);
	
	/**
	 * 功能描述: <br>
	 * 灰度切流
	 *
	 * @param finalPercent   切流百分比，如1% 则是1
	 * @param groupId        发布分组id
	 * @return
	 */
	int handleGrayRelease(int finalPercent,Long groupId);
	
	/**
	 * 功能描述: <br>
	 * 获取分组服务地址
	 *
	 * @param switchEnvName  分组名，如prod
	 * @param serverList     全部服务地址
	 * @return
	 */
	Map<String,String> getGroupServerIp(String switchEnvName,List<Server> serverList);
	
	/**
	 * 功能描述: <br>
	 * 分页查询构建记录
	 *
	 * @param page          分页对象
	 * @param buildRecord   查询参数
	 * @param orderByField  排序的字段 如 create_time desc
	 * @return
	 */
	Page<BuildRecord> queryBuildRecordPageList(Page<BuildRecord> page, BuildRecord buildRecord, String orderByField);

	/**
	 * 功能描述: <br>
	 * 应用健康检查
	 *
	 * @return
	 */
	boolean healthCheck(HealthDto healthDto);
	
	/**
	 * 功能描述: <br>
	 * 上线服务
	 *
	 * @param appId   应用ID
	 * @param host    待上线的主机名
	 * @return
	 */
	boolean serverUp(Long appId,String host);
	
}